package com.junxian.springboot03.juc.threadPool.single;

/**
 *  effective java 作者极力推荐的枚举类单例实现模式
 *  因为枚举类型是线程安全的，并且只会装载一次，设计者充分的利用了枚举的这个特性来实现单例模式，枚举的写法非常简单，
 *  而且枚举类型是所用单例实现中唯一一种不会被破坏的单例实现模式。
 */
public class EnumSingle {

    private EnumSingle(){

    };

    /**
     * 枚举类型是线程安全的，并且只会装载一次
     */
    enum  Single {
        INSTANCE;

        private final EnumSingle enumSingle;

        private Single() {
            enumSingle = new EnumSingle();
        }

        public EnumSingle getInstance() {
            return enumSingle;
        }
    }

    public static EnumSingle getInstance(){
        return Single.INSTANCE.getInstance();
    }

    public static void main(String[] args) {
        //测试获取的实例是否一直
        for (int i = 0; i < 10; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "--" + getInstance());
            }).start();
        }
    }
}
